package com.limf.demo.pattern.singleton;

public class SingletonDcl {

	/**
	 * 对保存实例的变量添加volatile的修饰
	 */
	private volatile static SingletonDcl singleton = null;
	
	private SingletonDcl() {}
	
	public static SingletonDcl getInstance() {
		
		// 先检查实例是否存在，如果不存在才进入下面的同步块
		if(singleton == null) {
			// 同步块，线程安全的创建实例
			synchronized(SingletonDcl.class) {
				// 再次检查实例是否存在，如果不存在才真的创建实例
				if(singleton == null) {
					singleton = new SingletonDcl();
				}
			}
		}
		return singleton;
	}
}
